package com.hspedu.newData.力扣周赛.双周赛.第156;

import org.junit.Test;

import java.util.Arrays;
import java.util.HashSet;

/**
 * @Author: yh
 * @description: 
 * @CreateTime: 2025-05-10 
 * @Version: 1.0
 */

public class LC100637将所有元素变为0的最少操作次数 {

    public int minOperations(int[] nums) {
        int n = nums.length;
        int operations = 0;

        int[] nums2 = new int[n];

        for (int i = 0; i < n; i++) {
            nums2[i] = nums[i];
        }

        Arrays.sort(nums2);

        int k = 0;
        // 继续进行操作直到所有元素都变为0
        while (k < n) {
            // 1. 找到当前数组中的最小非零值
//            int minVal = Integer.MAX_VALUE;

            while (k<n && nums2[k] == 0){
                k++;
            }
            if (k >= n){
                break;
            }
            int minVal = nums2[k];

//            // 2. 如果最小值是无穷大，说明数组已经全是0，结束循环
//            if (minVal == Integer.MAX_VALUE) {
//                break;
//            }

            // 3. 对所有最小值所在的连续区间执行操作
            for (int i = 0; i < n; i++) {
                // 找到最小值，并把它设置为0
                if (nums[i] == minVal) {
                    int j = i;
                    // 向右扩展，找到连续的最小值区间
                    while (j < n) {
                        if (nums[j] == minVal){
                            nums[j] = 0;// 把最小值设为0
                            k++;
                        }else if (nums[j] == 0){
                            break;
                        }
                        j++;
                    }
                    break;  // 跳到下一个区间
                }
            }

//            for (int x : sortedUniqueNums) {
//                boolean inInterval = false;
//                for (int num : nums) {
//                    if (num == x) {
//                        if (!inInterval) {
//                            inInterval = true;
//                        }
//                    } else {
//                        inInterval = false;
//                    }
//                }
//                operations++;
//            }
            operations++;// 完成一次操作
        }

        return operations;  // 返回操作次数
    }

    @Test
    public void test() {
        // 测试代码

        minOperations(new int[]{0,2});
        minOperations(new int[]{0});
        minOperations(new int[]{3,1,2,1});
        minOperations(new int[]{1,2,1,2,1,2});
        minOperations(new int[]{1,2,1,2,1,2,1,3,4,3,1,21,3,1,21});

        System.out.println("1111");
    }
}
